
# coding: utf-8

# In[1]:

# Using my_extraction(15).py-assg_code_15

import os
os.chdir('d:/DATA/USPTO DATA/2016-2017/2017/raw')
from xml.dom.minidom import parseString
import re


# In[2]:

def process_single_xml_file(filename, writeon):
    xml_file = open(filename, 'r', encoding = "ISO-8859-1").read()
    xml_list = re.split('<\?xml.*?\?>', xml_file)    # 한 xml_file을 특허별로 나누어줌
    
    index = 1

    for one_xml in xml_list:

        if index > 1:

            dom = parseString(one_xml)
            B110 = dom.getElementsByTagName("publication-reference")[0]
            pid = B110.getElementsByTagName("doc-number")[0].firstChild.nodeValue
            
            if len(dom.getElementsByTagName("assignees"))>0:
                group = dom.getElementsByTagName("assignees")[0]
                assignees = group.getElementsByTagName("assignee")
            
                for assg in assignees:  
                              
                    asscode=1
                    asscode = assg.getElementsByTagName("role")[0].firstChild.nodeValue
                    
                    cnt, sta, city = '', '', ''
                    if len(assg.getElementsByTagName('address'))>0:
                        address=assg.getElementsByTagName('address')[0]
                
                        if len(assg.getElementsByTagName("country")) > 0:    
                            cnt = address.getElementsByTagName("country")[0].firstChild.nodeValue
                    
                        if len(assg.getElementsByTagName("state")) > 0:
                            sta = address.getElementsByTagName("state")[0].firstChild.nodeValue
                        
                        if len(assg.getElementsByTagName("city")) > 0:
                            city = address.getElementsByTagName("city")[0].firstChild.nodeValue
                
                    
                    if pid[0]=='0': writeon.write(pid[1:] + '*' + asscode + '*' + cnt + '*' + sta + '*' + city + '\n') 
                     
            # print(pid)    # 문제가 발생한 특허를 확인하려면 이 기능을 키고 돌릴 것
        index += 1


# In[3]:

def select_files_in_folder(dir, ext):
    for file in os.listdir(dir):    # 'dir'에 있는 모든 파일들 이름으로 list를 만듦
        if file.endswith('.%s' % ext):    # 확장자가 .ext인 파일일 경우 True
            yield os.path.join(dir, file)    # 'dir/file' 형태의 새로운 dir를 뱉어냄
            
# 'dir' 안에 확장자가 '.ext'인 모든 file들로 이루어진 generator(한번 iterate 시키고 나면 사라지는 list)를 만드는 함수


# In[4]:

file = open("asscode_2017.csv", 'w', encoding = "utf-8")

for xmlfile in select_files_in_folder('d:/DATA/USPTO DATA/2016-2017/2017/raw', 'xml'):
    print(xmlfile)
    process_single_xml_file(xmlfile, file)

print("DONE")
file.close()


# In[ ]:



